<?php 

	class Validate{
		
		public function Email($email)
		{
			//regulärtutryck för om mailen skall stämma
			$regexp = "/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/";
			
			//matchar den med vår mail
			if (preg_match($regexp, $email)) {
				return true;
			}
			//om inte, stämmer den inte
			else {
				return false;
			}
		}
		
		function luhn($input)
		{
			$sum = 0;
			$odd = strlen($input) % 2;
			 
			//Kollar om det finns annat än nummer i personnummret, returnerar false.
			if (!is_numeric($input))
			{
				return false;
			}
			 
			//kontrollerar varje siffra så den stämmer in på den luhn algoritmen ish
			for ($i = 0; $i < strlen($input); $i++)
			{
				$sum += $odd ? $input[$i] : (($input[$i] * 2 > 9) ? $input[$i] * 2 - 9 : $input[$i] * 2);
				$odd = !$odd;			
			}

			//Om det är delbart med 10, stämmer det.
			if ($sum % 10 == 0) {
				return true;
			}
			
			return false;
		}	 
	
		public function PersonNumber($socialInsuranceNumber)
		{
			//kollar om personnr stämmer inom de regulärauttrycken
			if (preg_match("/^\b(((20)((0[0-9])|(1[0-1])))|(([1][^0-8])?\d{2}))((0[1-9])|1[0-2])((0[1-9])|(2[0-9])|(3[01]))[-+]?\d{4}[,.]?\b$/", $socialInsuranceNumber))
			{
				return true;
			}
			//samt kollar om de stämmer inom Luhn.
			else if ($this->luhn($socialInsuranceNumber) == true) 
			{
				return true;
			}
			//om ej, FALSKT 
			else
			{
				return false;
			}
		}
		
		public function Date($date)
		{
			$regex = "/^[0-9][0-9][0-9][0-9][0-9][0-9]$/";
			$regex2 = "/^[0-9][0-9]-[0-9][0-9]-[0-9][0-9]$/";
			$regex3 = "/^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$/";
			
			//regulärtutryck för om datumet skall stämma
			if (preg_match($regex, $date) || preg_match($regex2, $date) || preg_match($regex3, $date)) {
				return preg_replace("/(\d+)-(\d+)-(\d+)/", "$2/$3/$1", $date);
			}
			else {
				return false;
			}
		}
		
		//Sträng utan visning av html och javascript.
		public function Strings($strings)
		{
			$regex = "/^[a-zA-Z0-9_]{1,}$/";
			
			//regulärtutryck som inte kan ta in html och javascript.
			if (preg_match($regex, $strings)) {
				return true;
			}
			else {
				return false;
			}
		}
		
		//Tillåter viss html-kod, ej javascript.
		public function StringsHtml($html)
		{
			//Reguljärt uttryck som tar in html men inte javascritp.
			$regex = "/[<](.*?)[>]/";
			
			if (preg_match($regex, $html)) {
				return true;
			}
			else {
				return false;
			}
			
		}
		
		public function Password($password) 
		{
			//Kollar så att lösenordet är minst 6 tecken, och innehåller siffror samt stora och små bokstäver.
			$regex = "/^.*(?=.{6,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$/";
			
			if (preg_match($regex, $password)) {
				return true;
			}
			else {
				return false;
			}
		}
		
		public function Number($number)
		{
			//Kollar så att det bara är nummer.
			$regex = "/^[0-9]{0,}$/";
			
			if (preg_match($regex, $number)) {
				return true;
			}	
			else {
				return false;
			}
		}
		
		public function Test()
		{
			if ($this->Email("bajsråtta") == true) {
				throw new Exception('Email test1 fel.');
			}
			
			if ($this->Email("bla@hotmail.com") == false) {
				throw new Exception('Email test2 fel.');
			}
			
			if ($this->PersonNumber("asdf") == true) {
				throw new Exception('Personnummer test1 fel.');
			}
			
			if ($this->PersonNumber("9108242323") == false) {
				throw new Exception('Personnummer test2 fel.');
			}
			
			if ($this->PersonNumber("0000001000") == true) {
				throw new Exception('Personnummer test3 fel.');
			}
			
			if ($this->Date("25/10-2010") == true) {
				throw new Exception('Datum test1 fel.');
			}
			
			if ($this->Date(991001) == false) {
				throw new Exception('Datum test2 fel.');
			}
			
			if ($this->Date("1999-10-01") == false) {
				throw new Exception('Datum test2 fel.');
			}
						
			if ($this->Date("99-10-01") == false) {
				throw new Exception('Datum test2 fel.');
			}
			
			if ($this->Strings("<br>lol</br>") == true) {
				throw new Exception('String test1 fel.');
			}
			
			if ($this->StringsHtml("gdf<br>lol</br>gdf") == false) {
				throw new Exception('StringHtml test1 fel.');
			}
			if ($this->StringsHtml("dzf{lol}gdf") == true) {
				throw new Exception('StringHtml test2 fel.');
			}
			
			if ($this->Password("df*") == true) {
				throw new Exception('lösenord test1 fel.');
			}
			
			if ($this->Password("Hejhej123") == false) {
				throw new Exception('Lösenord test2 fel.');
			}
			
			if ($this->Number("asdg") == true) {
				throw new Exception('Nummer test1 fel.');
			}
			
			if ($this->Number(2342) == false) {
				throw new Exception('Nummer test2 fel.');
			}
			else {
				return true;
			}
			return false;
		}
	}
?>


